package com.example.web.service.mq;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.example.web.pojo.ProcessUserVo;
import com.linsy.product.redis.mq.entity.MqDataVO;
import com.linsy.product.redis.mq.service.ConsumersMsgDecorator;
import com.linsy.product.redis.mq.util.RedisUtil;
import org.springframework.stereotype.Component;

/***
 * 消费者
 */
@Component
public class TestConsumer extends ConsumersMsgDecorator<ProcessUserVo> {

    public TestConsumer(RedisUtil redisUtil) {
        // 第二个参数是消费主题
        super(redisUtil, "TEST");
    }

    /**
     * 消费前的处理
     */
    @Override
    public void beforeConsumers(MqDataVO mqDataVO) {
        // 发送前，生成的唯一id
        Long rowId = mqDataVO.getRowId();
        // 消息json
        String mqData = mqDataVO.getMqData();
        System.out.println("消费前的事件");
    }

    /**
     * 消费中的处理
     */
    @Override
    public void consumersMethod(ProcessUserVo s) {
        System.out.println("消费消息：" + s);
    }

    /**
     * 消费后的处理
     */
    @Override
    public void afterConsumers(MqDataVO mqDataVO) {
        // 发送前，生成的唯一id
        Long rowId = mqDataVO.getRowId();
        // 消息json
        String mqData = mqDataVO.getMqData();
        System.out.println("消费后的事件");
    }

    @Override
    public void consumersError(Throwable trowEx) {
        System.out.println("有异常抛出");
    }

    /**
     * 消息类型转换，传回来是json
     * 常见类型String或者Long等，String直接转换对应的类型即可
     */
    @Override
    public ProcessUserVo convert(String json) {
        return JSON.parseObject(json, new TypeReference<ProcessUserVo>(){
        });
    }


}
